package org.stars.util.reflect.test1;


/**
 * <p>Chiave per il recupero di una qualsiasi entità a partire dal suo ID.</p>
 * <p>UK: l'ID dell'entità</p>
 * 
 * @author F. Bianchi (909214)
 */
public class ChiaveId implements ChiaveNumber<Long>
{
    private Long id;

    /**
     * <p>Costruttore</p>
     * 
     * @param id l'ID dell'entità
     */
    public ChiaveId(Long id)
    {
        this.id = id;
    }

    /* (non-Javadoc)
     * @see it.insiel.personale.economico.common.keys.ChiaveNumber#getId()
     */
    @Override
	public Long getId()
    {
        return this.id;
    }


    /**
     * @param o l'oggetto da comparare
     * @return <i>true</i> se 2 oggetti sono equivalnti, <i>false</i> altrimenti
     */
    @Override
	public boolean equals(Object o)
    {
        if (this == o)
        {
            return true;
        }
        if (o == null || getClass() != o.getClass())
        {
            return false;
        }

        ChiaveId chiaveId = (ChiaveId) o;

        return !(id != null ? !id.equals(chiaveId.id) : chiaveId.id != null);

    }

    /**
     * <p>Viene calcolato sul solo campo ID</p>
     * 
     * @return l'hashcode calcolato
     */
    @Override
	public int hashCode()
    {
        return (id != null ? id.hashCode() : 0);
    }

    /* (non-Javadoc)
      * @see it.insiel.personale.economico.core.ChiaveTipo#equals(it.insiel.personale.economico.core.ChiaveTipo)
      */
	@Override
	public <K extends ChiaveTipo> boolean equals(K k) 
	{
		return equals((Object)k);
	}

}
